home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / checkforuae / checkforuae.c < prev    next >
C/C++ Source or Header  |  1998-01-05  |  3KB  |  136 lines

  1. /*
  2. **      $VER: CheckForUAE.c 1.00 (28.12.97)
  3. **
  4. **      Check, whether running in an UAE environment w/ P96
  5. **
  6. **      (C) Copyright 1997 Andreas R. Kleinert
  7. **      Freeware. All Rights Reserved.
  8. */
  9.  
  10. #define __USE_SYSBASE
  11.  
  12. #include <exec/types.h>
  13. #include <exec/memory.h>
  14.  
  15. #include <intuition/intuition.h>
  16. #include <graphics/gfxbase.h>
  17. #include <graphics/displayinfo.h>
  18. #include <graphics/modeid.h>
  19.  
  20. #include <proto/exec.h>
  21. #include <proto/intuition.h>
  22. #include <proto/graphics.h>
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27.  
  28.  
  29. #ifndef N
  30. #define N (NULL)
  31. #endif /* N */
  32.  
  33.  
  34. char ver_text [] = "\0$VER: CheckForUAE 1.00 (28.12.97)";
  35.  
  36.  
  37. /* *************************************************** */
  38. /* *                                                 * */
  39. /* * Additional Base Declarations                    * */
  40. /* *                                                 * */
  41. /* *************************************************** */
  42.  
  43. extern struct ExecBase *SysBase;
  44.  
  45. struct IntuitionBase *IntuitionBase = N;
  46. struct GfxBase       *GfxBase       = N;
  47.  
  48.  
  49. /* *************************************************** */
  50. /* *                                                 * */
  51. /* * MAIN                                            * */
  52. /* *                                                 * */
  53. /* *************************************************** */
  54.  
  55. void __regargs __chkabort(void) { }
  56. void __regargs _CXBRK(void)     { }
  57.  
  58.  
  59. ULONG RunningUnderUAE(void);
  60.  
  61. void main(long argc, char **argv)
  62. {
  63.  ULONG error = 0;
  64.  
  65.  IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 37);
  66.  if(IntuitionBase)
  67.   {
  68.    GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 37);
  69.    if(GfxBase)
  70.     {
  71.      if(RunningUnderUAE()) printf("\n We are running under UAE with P96\n\n");
  72.       else                 printf("\n We are probably not running under UAE with P96\n\n");
  73.     }else error = 20;
  74.  
  75.    CloseLibrary((APTR) IntuitionBase);
  76.  
  77.   }else error = 20;
  78.  
  79.  exit(error);
  80. }
  81.  
  82. ULONG IsUAEModeID(ULONG mode_id);
  83.  
  84. ULONG RunningUnderUAE(void)
  85. {
  86.  ULONG mode_id  = INVALID_ID;
  87.  ULONG retval   = FALSE;
  88.  
  89.  for(;;)
  90.   {
  91.    mode_id = NextDisplayInfo(mode_id);
  92.    if(mode_id == INVALID_ID) break;
  93.  
  94.    retval = IsUAEModeID(mode_id);
  95.    if(retval) break;
  96.   }
  97.  
  98.  return(retval);
  99. }
  100.  
  101. ULONG IsUAEModeID(ULONG mode_id)
  102. {
  103.  APTR                   mode_handle  = N;
  104.  struct DimensionInfo  *mode_diminfo = N;
  105.  struct NameInfo       *mode_naminfo = N;
  106.  long                   mode_dimsize = sizeof(struct DimensionInfo);
  107.  long                   mode_namsize = sizeof(struct NameInfo);
  108.  ULONG                  mode_result  = N;
  109.  ULONG                  retval       = FALSE;
  110.  
  111.  mode_handle = FindDisplayInfo(mode_id);
  112.  if(mode_handle)
  113.   {
  114.    mode_diminfo = (APTR) AllocVec(mode_dimsize, (MEMF_CLEAR|MEMF_PUBLIC));
  115.    mode_naminfo = (APTR) AllocVec(mode_namsize, (MEMF_CLEAR|MEMF_PUBLIC));
  116.  
  117.    if(mode_diminfo && mode_naminfo)
  118.     {
  119.      mode_result = GetDisplayInfoData(mode_handle, (UBYTE *) mode_diminfo, mode_dimsize, DTAG_DIMS, N);
  120.      mode_result = GetDisplayInfoData(mode_handle, (UBYTE *) mode_naminfo, mode_namsize, DTAG_NAME, N);
  121.  
  122.      if(mode_result && (!ModeNotAvailable(mode_id)))
  123.       {
  124.        if(!strnicmp(mode_naminfo->Name, "UAEGFX", 6)) retval = TRUE;
  125.  
  126.        /* further checks could be added here, when necessary */
  127.       }
  128.     }
  129.  
  130.    if(mode_diminfo) FreeVec(mode_diminfo);
  131.    if(mode_naminfo) FreeVec(mode_naminfo);
  132.   }
  133.  
  134.  return(retval);
  135. }
  136.